
import rsa
import binascii

# 使用网页中获得的n和e值，将明文加密
def rsa_encrypt(rsa_n, rsa_e, message):
    # 用n值和e值生成公钥
    key = rsa.PublicKey(rsa_n, rsa_e)
    # 用公钥把明文加密
    message = rsa.encrypt(message.encode(), key)
    print(message)
    # 转化成常用的可读性高的十六进制
    message = binascii.b2a_hex(message)
    # 将加密结果转化回字符串并返回
    print(message)
    return message.decode()

# RSA的公钥有两个值n和e，我们在网站中获得的公钥一般就是这样的两个值。
# n常常为长度为256的十六进制字符串
# e常常为十六进制‘10001’
pubkey_n = '8d7e6949d411ce14d7d233d7160f5b2cc753930caba4d5ad24f923a505253b9c39b09a059732250e56c594d735077cfcb0c3508e9f544f101bdf7e97fe1b0d97f273468264b8b24caaa2a90cd9708a417c51cf8ba35444d37c514a0490441a773ccb121034f29748763c6c4f76eb0303559c57071fd89234d140c8bb965f9725'
pubkey_e = '10001'
# 需要将十六进制转换成十进制
rsa_n = int(pubkey_n, 16)
rsa_e = int(pubkey_e, 16)
# 要加密的明文
message = '南北今天很忙'

print("公钥n值长度：", len(pubkey_n))
v=rsa_encrypt(rsa_n, rsa_e, message)
print(len(v))
print(bytes().fromhex(v))

if __name__ == '__main__':
	


'''
import random as r
def generate(self):
	#strg = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
	strg = '0123456789abcdef'
	stre = ''
	v = len(strg)
	for i in range(self):
		#r.shuffle(strg)#打乱列表的字符排序
		#r.randrange(1,10)#随机选取1到10之间的一个实数
		#r.uniform(1,10)#给出1到10之间的随机实数
		#r.randint(1,10)#给出1到10之间的随机整数
		stre += r.choice(strg)#从字符串或列表中随机选取一个字符或一个元素
		#stre += r.sample(strg,1)#从列表中随机选取一个数据
	return stre

if __name__ == '__main__':
	k = generate(256)
	print(k)
'''
